﻿#pragma once

#include "precomp.h"
#include "game_object.h"
#include "resources.h"
#include "player.h"

const unsigned int MAX_BONUS=4000;

// Падающие бонусы
// Типы:
// ---
// 0 - красный паверап
// 1 - синие очки
// 2 - время спеллкарты
// 3 - большой красный паверап
//
// 16 - star, отменённые пули спеллкарты босса
// ---
class Bonus : public GameObject{
public:
	unsigned int id;
	float speed;
	CL_Vec2f move;
	float time_lived;
	char active;
	char bonus_type;
	char to_player; // движется ли к игроку
};

class BonusManager {
private:
	//std::vector<Bonus> bonuses;
	Bonus* bonuses;
	unsigned int *id_index_table;
	unsigned int active_bonus_count;
	unsigned int next_free_id_slot;

	float bonus_accel;
	float max_speed;
	float point_line;
	int point_score_min;
	int point_score_max;
	CL_Sprite *bonus_sprite;
public:
	BonusManager();
	~BonusManager();

	float score_time;

	void Init(float b_accel, float max_s, float s_time, float p_line, int p_score_min, int p_score_max);

	unsigned int Add(Bonus &p_bonus_description);

	void Clear();
	void Update(float time);
	void Render(CL_GraphicContext &gc, CL_Rect &clip);
	void CalculateCollisions();
};

extern BonusManager bonus_manager;
